home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / security / Signature.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  9.1 KB  |  339 lines

  1. package java.security;
  2.  
  3. import java.nio.ByteBuffer;
  4. import java.security.cert.Certificate;
  5. import java.security.cert.X509Certificate;
  6. import java.security.spec.AlgorithmParameterSpec;
  7. import java.util.Arrays;
  8. import java.util.Iterator;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.Set;
  12. import java.util.concurrent.ConcurrentHashMap;
  13. import javax.crypto.Cipher;
  14. import sun.security.jca.GetInstance;
  15. import sun.security.jca.ServiceId;
  16. import sun.security.util.Debug;
  17.  
  18. public abstract class Signature extends SignatureSpi {
  19.    private static final Debug debug = Debug.getInstance("jca", "Signature");
  20.    private String algorithm;
  21.    Provider provider;
  22.    protected static final int UNINITIALIZED = 0;
  23.    protected static final int SIGN = 2;
  24.    protected static final int VERIFY = 3;
  25.    protected int state = 0;
  26.    private static final String RSA_SIGNATURE = "NONEwithRSA";
  27.    private static final String RSA_CIPHER = "RSA/ECB/PKCS1Padding";
  28.    private static final List<ServiceId> rsaIds = Arrays.asList(new ServiceId("Signature", "NONEwithRSA"), new ServiceId("Cipher", "RSA/ECB/PKCS1Padding"), new ServiceId("Cipher", "RSA/ECB"), new ServiceId("Cipher", "RSA//PKCS1Padding"), new ServiceId("Cipher", "RSA"));
  29.    private static final Map<String, Boolean> signatureInfo = new ConcurrentHashMap();
  30.  
  31.    protected Signature(String var1) {
  32.       this.algorithm = var1;
  33.    }
  34.  
  35.    public static Signature getInstance(String var0) throws NoSuchAlgorithmException {
  36.       List var1;
  37.       if (var0.equalsIgnoreCase("NONEwithRSA")) {
  38.          var1 = GetInstance.getServices(rsaIds);
  39.       } else {
  40.          var1 = GetInstance.getServices("Signature", var0);
  41.       }
  42.  
  43.       Iterator var2 = var1.iterator();
  44.       if (!var2.hasNext()) {
  45.          throw new NoSuchAlgorithmException(var0 + " Signature not available");
  46.       } else {
  47.          while(true) {
  48.             Provider.Service var4 = (Provider.Service)var2.next();
  49.             if (isSpi(var4)) {
  50.                return new Delegate(var4, var2, var0);
  51.             }
  52.  
  53.             try {
  54.                GetInstance.Instance var5 = GetInstance.getInstance(var4, SignatureSpi.class);
  55.                return getInstance(var5, var0);
  56.             } catch (NoSuchAlgorithmException var6) {
  57.                if (!var2.hasNext()) {
  58.                   throw var6;
  59.                }
  60.             }
  61.          }
  62.       }
  63.    }
  64.  
  65.    private static Signature getInstance(GetInstance.Instance var0, String var1) {
  66.       Object var2;
  67.       if (var0.impl instanceof Signature) {
  68.          var2 = (Signature)var0.impl;
  69.       } else {
  70.          SignatureSpi var3 = (SignatureSpi)var0.impl;
  71.          var2 = new Delegate(var3, var1);
  72.       }
  73.  
  74.       ((Signature)var2).provider = var0.provider;
  75.       return (Signature)var2;
  76.    }
  77.  
  78.    private static boolean isSpi(Provider.Service var0) {
  79.       if (var0.getType().equals("Cipher")) {
  80.          return true;
  81.       } else {
  82.          String var1 = var0.getClassName();
  83.          Boolean var2 = (Boolean)signatureInfo.get(var1);
  84.          if (var2 == null) {
  85.             try {
  86.                Object var3 = var0.newInstance((Object)null);
  87.                boolean var4 = var3 instanceof SignatureSpi && !(var3 instanceof Signature);
  88.                if (debug != null && !var4) {
  89.                   debug.println("Not a SignatureSpi " + var1);
  90.                   debug.println("Delayed provider selection may not be available for algorithm " + var0.getAlgorithm());
  91.                }
  92.  
  93.                var2 = var4;
  94.                signatureInfo.put(var1, var2);
  95.             } catch (Exception var5) {
  96.                return false;
  97.             }
  98.          }
  99.  
  100.          return var2;
  101.       }
  102.    }
  103.  
  104.    public static Signature getInstance(String var0, String var1) throws NoSuchAlgorithmException, NoSuchProviderException {
  105.       if (var0.equalsIgnoreCase("NONEwithRSA")) {
  106.          if (var1 != null && var1.length() != 0) {
  107.             Provider var3 = Security.getProvider(var1);
  108.             if (var3 == null) {
  109.                throw new NoSuchProviderException("no such provider: " + var1);
  110.             } else {
  111.                return getInstanceRSA(var3);
  112.             }
  113.          } else {
  114.             throw new IllegalArgumentException("missing provider");
  115.          }
  116.       } else {
  117.          GetInstance.Instance var2 = GetInstance.getInstance("Signature", SignatureSpi.class, var0, var1);
  118.          return getInstance(var2, var0);
  119.       }
  120.    }
  121.  
  122.    public static Signature getInstance(String var0, Provider var1) throws NoSuchAlgorithmException {
  123.       if (var0.equalsIgnoreCase("NONEwithRSA")) {
  124.          if (var1 == null) {
  125.             throw new IllegalArgumentException("missing provider");
  126.          } else {
  127.             return getInstanceRSA(var1);
  128.          }
  129.       } else {
  130.          GetInstance.Instance var2 = GetInstance.getInstance("Signature", SignatureSpi.class, var0, var1);
  131.          return getInstance(var2, var0);
  132.       }
  133.    }
  134.  
  135.    private static Signature getInstanceRSA(Provider var0) throws NoSuchAlgorithmException {
  136.       Provider.Service var1 = var0.getService("Signature", "NONEwithRSA");
  137.       if (var1 != null) {
  138.          GetInstance.Instance var4 = GetInstance.getInstance(var1, SignatureSpi.class);
  139.          return getInstance(var4, "NONEwithRSA");
  140.       } else {
  141.          try {
  142.             Cipher var2 = Cipher.getInstance("RSA/ECB/PKCS1Padding", var0);
  143.             return new Delegate(new CipherAdapter(var2), "NONEwithRSA");
  144.          } catch (GeneralSecurityException var3) {
  145.             throw new NoSuchAlgorithmException("no such algorithm: NONEwithRSA for provider " + var0.getName(), var3);
  146.          }
  147.       }
  148.    }
  149.  
  150.    public final Provider getProvider() {
  151.       this.chooseFirstProvider();
  152.       return this.provider;
  153.    }
  154.  
  155.    void chooseFirstProvider() {
  156.    }
  157.  
  158.    public final void initVerify(PublicKey var1) throws InvalidKeyException {
  159.       this.engineInitVerify(var1);
  160.       this.state = 3;
  161.    }
  162.  
  163.    public final void initVerify(Certificate var1) throws InvalidKeyException {
  164.       if (var1 instanceof X509Certificate) {
  165.          X509Certificate var2 = (X509Certificate)var1;
  166.          Set var3 = var2.getCriticalExtensionOIDs();
  167.          if (var3 != null && !var3.isEmpty() && var3.contains("2.5.29.15")) {
  168.             boolean[] var4 = var2.getKeyUsage();
  169.             if (var4 != null && !var4[0]) {
  170.                throw new InvalidKeyException("Wrong key usage");
  171.             }
  172.          }
  173.       }
  174.  
  175.       PublicKey var5 = var1.getPublicKey();
  176.       this.engineInitVerify(var5);
  177.       this.state = 3;
  178.    }
  179.  
  180.    public final void initSign(PrivateKey var1) throws InvalidKeyException {
  181.       this.engineInitSign(var1);
  182.       this.state = 2;
  183.    }
  184.  
  185.    public final void initSign(PrivateKey var1, SecureRandom var2) throws InvalidKeyException {
  186.       this.engineInitSign(var1, var2);
  187.       this.state = 2;
  188.    }
  189.  
  190.    public final byte[] sign() throws SignatureException {
  191.       if (this.state == 2) {
  192.          return this.engineSign();
  193.       } else {
  194.          throw new SignatureException("object not initialized for signing");
  195.       }
  196.    }
  197.  
  198.    public final int sign(byte[] var1, int var2, int var3) throws SignatureException {
  199.       if (var1 == null) {
  200.          throw new IllegalArgumentException("No output buffer given");
  201.       } else if (var1.length - var2 < var3) {
  202.          throw new IllegalArgumentException("Output buffer too small for specified offset and length");
  203.       } else if (this.state != 2) {
  204.          throw new SignatureException("object not initialized for signing");
  205.       } else {
  206.          return this.engineSign(var1, var2, var3);
  207.       }
  208.    }
  209.  
  210.    public final boolean verify(byte[] var1) throws SignatureException {
  211.       if (this.state == 3) {
  212.          return this.engineVerify(var1);
  213.       } else {
  214.          throw new SignatureException("object not initialized for verification");
  215.       }
  216.    }
  217.  
  218.    public final boolean verify(byte[] var1, int var2, int var3) throws SignatureException {
  219.       if (this.state == 3) {
  220.          if (var1 != null && var2 >= 0 && var3 >= 0 && var2 + var3 <= var1.length) {
  221.             return this.engineVerify(var1, var2, var3);
  222.          } else {
  223.             throw new IllegalArgumentException("Bad arguments");
  224.          }
  225.       } else {
  226.          throw new SignatureException("object not initialized for verification");
  227.       }
  228.    }
  229.  
  230.    public final void update(byte var1) throws SignatureException {
  231.       if (this.state != 3 && this.state != 2) {
  232.          throw new SignatureException("object not initialized for signature or verification");
  233.       } else {
  234.          this.engineUpdate(var1);
  235.       }
  236.    }
  237.  
  238.    public final void update(byte[] var1) throws SignatureException {
  239.       this.update(var1, 0, var1.length);
  240.    }
  241.  
  242.    public final void update(byte[] var1, int var2, int var3) throws SignatureException {
  243.       if (this.state != 2 && this.state != 3) {
  244.          throw new SignatureException("object not initialized for signature or verification");
  245.       } else {
  246.          this.engineUpdate(var1, var2, var3);
  247.       }
  248.    }
  249.  
  250.    public final void update(ByteBuffer var1) throws SignatureException {
  251.       if (this.state != 2 && this.state != 3) {
  252.          throw new SignatureException("object not initialized for signature or verification");
  253.       } else if (var1 == null) {
  254.          throw new NullPointerException();
  255.       } else {
  256.          this.engineUpdate(var1);
  257.       }
  258.    }
  259.  
  260.    public final String getAlgorithm() {
  261.       return this.algorithm;
  262.    }
  263.  
  264.    public String toString() {
  265.       String var1 = "";
  266.       switch (this.state) {
  267.          case 0:
  268.             var1 = "<not initialized>";
  269.          case 1:
  270.          default:
  271.             break;
  272.          case 2:
  273.             var1 = "<initialized for signing>";
  274.             break;
  275.          case 3:
  276.             var1 = "<initialized for verifying>";
  277.       }
  278.  
  279.       return "Signature object: " + this.getAlgorithm() + var1;
  280.    }
  281.  
  282.    /** @deprecated */
  283.    @Deprecated
  284.    public final void setParameter(String var1, Object var2) throws InvalidParameterException {
  285.       this.engineSetParameter(var1, var2);
  286.    }
  287.  
  288.    public final void setParameter(AlgorithmParameterSpec var1) throws InvalidAlgorithmParameterException {
  289.       this.engineSetParameter(var1);
  290.    }
  291.  
  292.    public final AlgorithmParameters getParameters() {
  293.       return this.engineGetParameters();
  294.    }
  295.  
  296.    /** @deprecated */
  297.    @Deprecated
  298.    public final Object getParameter(String var1) throws InvalidParameterException {
  299.       return this.engineGetParameter(var1);
  300.    }
  301.  
  302.    public Object clone() throws CloneNotSupportedException {
  303.       if (this instanceof Cloneable) {
  304.          return super.clone();
  305.       } else {
  306.          throw new CloneNotSupportedException();
  307.       }
  308.    }
  309.  
  310.    // $FF: synthetic method
  311.    static String access$000(Signature var0) {
  312.       return var0.algorithm;
  313.    }
  314.  
  315.    // $FF: synthetic method
  316.    static Debug access$100() {
  317.       return debug;
  318.    }
  319.  
  320.    // $FF: synthetic method
  321.    static boolean access$200(Provider.Service var0) {
  322.       return isSpi(var0);
  323.    }
  324.  
  325.    static {
  326.       Boolean var0 = Boolean.TRUE;
  327.       signatureInfo.put("sun.security.provider.DSA$RawDSA", var0);
  328.       signatureInfo.put("sun.security.provider.DSA$SHA1withDSA", var0);
  329.       signatureInfo.put("sun.security.rsa.RSASignature$MD2withRSA", var0);
  330.       signatureInfo.put("sun.security.rsa.RSASignature$MD5withRSA", var0);
  331.       signatureInfo.put("sun.security.rsa.RSASignature$SHA1withRSA", var0);
  332.       signatureInfo.put("sun.security.rsa.RSASignature$SHA256withRSA", var0);
  333.       signatureInfo.put("sun.security.rsa.RSASignature$SHA384withRSA", var0);
  334.       signatureInfo.put("sun.security.rsa.RSASignature$SHA512withRSA", var0);
  335.       signatureInfo.put("com.sun.net.ssl.internal.ssl.RSASignature", var0);
  336.       signatureInfo.put("sun.security.pkcs11.P11Signature", var0);
  337.    }
  338. }
  339.